import lang from './lang'
import img from './img'

class Plugin{
  // 传入核心
  constructor(data) {
    this.data = data
  }

  // 语言项
  message(name) {
    return this.key() + '.' + name
  }

  // 翻译
  t(...arge) {
    arge[0] = this.message(arge[0])
    return lang.t(...arge)
  }

  // 原样
  tm(...arge) {
    arge[0] = this.message(arge[0])
    return lang.tm(...arge)
  }

  // 插件Key
  key() {
    return this.data.name
  }

  // 插件名称
  name() {
    return this.t('name')
  }

  // 描述
  content() {
    return this.t('content')
  }

  // 插件图标
  img() {
    return img(this.data.img)
  }

  // id
  id() {
    return this.data.id
  }

  // 路径
  url() {
    return this.data.url
  }

  // 载入菜单
  loadMenu(menu, hidden) {
    if(!this.menu) {
      this.menu = !menu.length ? null : menu.map(item => {
        // 多语言
        item.name = this.t(item.name)
        // 路径
        item.url = this.url() + item.url
        return item
      })
    }

    this.menuHidden = hidden ?? false
  }
}

export default {
  // 插件集
  list: [],
  plugin: {},

  // 生成插件
  build(data) {
    data.forEach(item => {
      const singleton = this.make(item)
      this.list.push(singleton)
      this.plugin[singleton.key()] = singleton
    })
  },

  // 使用插件
  make(data) {
    return new Plugin(data)
  },

  // 获取插件
  get(name) {
    return this.plugin[name]
  },

  // 过滤
  filter(ids) {
    return this.list.filter(plugin => {
      return ids.includes(plugin.id())
    })
  }
}